/**
 * describe:
 *
 * @author chaP
 * @date 2019/04/09
 */
package CodingTest.AC20190409;

import java.util.Arrays;

/**leetcode -287
 * 给定一个包含 n + 1 个整数的数组 nums，其数字都在 1 到 n 之间（包括 1 和 n），可知至少存在一个重复的整数。假设只有一个重复的整数，找出这个重复的数。

 示例 1:

 输入: [1,3,4,2,2]
 输出: 2
 示例 2:

 输入: [3,1,3,4,2]
 输出: 3
 说明：

 不能更改原数组（假设数组是只读的）。
 只能使用额外的 O(1) 的空间。
 时间复杂度小于 O(n2) 。
 数组中只有一个重复的数字，但它可能不止重复出现一次。
 */
public class findDuplicate {
    //方法一：
    public int findDuplicate(int [] nums){
        Arrays.sort(nums);
        for(int i=1;i<nums.length;i++){
            if(nums[i] ==nums[i-1]){
                return nums[i];
            }
        }return 0;
    }
    //方法二：下标法
    public int findDuplicate1(int [] nums){
        int i =0;
        while(nums[i] !=0)
        {
            int x = nums[i];
            nums[i] =0;
            i=x;
        }
        return i;
    }

    public static void main(String[] args) {
        findDuplicate fd = new findDuplicate();
        int[] nums = {3,1,3,4,2};
        System.out.println(fd.findDuplicate1(nums));
    }
}
